package org.farec.tcc.spring.controller;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.farec.tcc.dao.PermissaoDAO;
import org.farec.tcc.dao.UnidadeDAO;
import org.farec.tcc.dao.UsuarioDAO;
import org.farec.tcc.modelo.Permissao;
import org.farec.tcc.modelo.Unidade;
import org.farec.tcc.modelo.Usuario;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class UnidadeController {
	
	@RequestMapping("/formUnidade")
	public String formUnidade(Model model, HttpServletRequest request)
	{	
		/*
		 * Metodo revisado no dia 04/12 e testado;
		 * 
		 */
		
		Connection connection = (Connection) request.getAttribute("conexao");
		
		HttpSession session = request.getSession();
		Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");
		PermissaoDAO daoPermissao = new PermissaoDAO(connection);
		UsuarioDAO daoUsuario = new UsuarioDAO(connection);
		int codEmpresa = daoUsuario.verificaEmpresa(usuario);
		List<Permissao> permissaoList = daoPermissao.verificaPermissao(codEmpresa,usuario,"item");
		
		for(Permissao p : permissaoList)
		{
			if(p.getModulo().equals("Unidade") && p.getItem().equals("adicionar"))
			{	
				return "cadunidade";
			}
		}
		
		return "index";
	}
	
	@RequestMapping("/adicionarUnidade")
	public String adiciona(Unidade unidade, Model model, HttpServletRequest request) throws SQLException
	{
		/*
		 * Metodo revisado no dia 04/12 e testado;
		 * 
		 */
		
		Connection connection = (Connection) request.getAttribute("conexao");
		
		HttpSession session = request.getSession();
		Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");
		PermissaoDAO daoPermissao = new PermissaoDAO(connection);
		UsuarioDAO daoUsuario = new UsuarioDAO(connection);
		int codEmpresa = daoUsuario.verificaEmpresa(usuario);
		List<Permissao> permissaoList = daoPermissao.verificaPermissao(codEmpresa,usuario,"item");
		
		for(Permissao p : permissaoList)
		{
			if(p.getModulo().equals("Unidade") && p.getItem().equals("adicionar"))
			{
				UnidadeDAO daoUnidade = new UnidadeDAO(connection);
				Map<String, Object> params = new LinkedHashMap<String, Object>(); 
				
				unidade.setCodEmpresa(codEmpresa);
				
				if(daoUnidade.getUnidade(unidade).isAlerta() == true) //Se existir unidade no banco ou seja, true != true
				{
					params.put("unidade", true);
					return "cadunidade";
				}
				
				//Se nao existir a unidade, ou seja, true == true
				params.put("unidade", false);
				daoUnidade.adiciona(unidade);
				return "redirect:listaUnidade";
			}
		}
		
		return "index";
	}
	
	@RequestMapping("/listaUnidade")
	public String lista(Model model, HttpServletRequest request)
	{
		Connection connection = (Connection) request.getAttribute("conexao");
		
		HttpSession session = request.getSession();
		Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");
		PermissaoDAO daoPermissao = new PermissaoDAO(connection);
		UsuarioDAO daoUsuario = new UsuarioDAO(connection);
		int codEmpresa = daoUsuario.verificaEmpresa(usuario);
		List<Permissao> permissaoList = daoPermissao.verificaPermissao(codEmpresa,usuario,"item");
		
		for(Permissao p : permissaoList)
		{
			if(p.getModulo().equals("Unidade") && p.getItem().equals("visualizar"))
			{
				UnidadeDAO dao = new UnidadeDAO(connection);
				
				model.addAttribute("permissoesList", permissaoList);
				model.addAttribute("unidades", dao.getLista(codEmpresa));
				return "unidade";
			}

		}
		
		return "index";
	}
	
	@RequestMapping("/exibeUnidade")
	public String mostra(int id, Model model, HttpServletRequest request)
	{
		/*
		 * Metodo revisado no dia 04/12 e testado;
		 * 
		 */
		
		Connection connection = (Connection) request.getAttribute("conexao");
		
		HttpSession session = request.getSession();
		Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");
		PermissaoDAO daoPermissao = new PermissaoDAO(connection);
		UsuarioDAO daoUsuario = new UsuarioDAO(connection);
		int codEmpresa = daoUsuario.verificaEmpresa(usuario);
		List<Permissao> permissaoList = daoPermissao.verificaPermissao(codEmpresa,usuario,"item");
		
		for(Permissao p : permissaoList)
		{
			if(p.getModulo().equals("Unidade") && p.getItem().equals("alterar"))
			{
				UnidadeDAO dao = new UnidadeDAO(connection);
				model.addAttribute("unidades", dao.buscaPorCodigo(codEmpresa, id));
				return "editunidade";
			}
		}
		
		return "index";
	}
	
	@RequestMapping("/alteraUnidade")
	public String altera(Unidade unidade, Model model, HttpServletRequest request) throws SQLException
	{
		/*
		 * Metodo revisado no dia 04/12 e testado;
		 * 
		 */
		
		Connection connection = (Connection) request.getAttribute("conexao");
		
		HttpSession session = request.getSession();
		Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");
		PermissaoDAO daoPermissao = new PermissaoDAO(connection);
		UsuarioDAO daoUsuario = new UsuarioDAO(connection);
		int codEmpresa = daoUsuario.verificaEmpresa(usuario);
		List<Permissao> permissaoList = daoPermissao.verificaPermissao(codEmpresa,usuario,"item");
		
		for(Permissao p : permissaoList)
		{
			if(p.getModulo().equals("Unidade") && p.getItem().equals("alterar"))
			{
				UnidadeDAO dao = new UnidadeDAO(connection);
				Map<String, Object> params = new LinkedHashMap<String, Object>(); 
				
				unidade.setCodEmpresa(codEmpresa);
				
				if(dao.getUnidadeUp(unidade).isAlerta() == true)
				{
					model.addAttribute("unidades", dao.buscaPorCodigo(codEmpresa, unidade.getCodigo()));
					params.put("unidade", true);
					return "editunidade";
				}
				
				dao.altera(unidade);
				return "redirect:listaUnidade";
			}
		}
		
		return "index";
	}
		
	@RequestMapping("/removeUnidade")
	public String remove(Unidade unidade, HttpServletRequest request)
	{
		/*
		 * Metodo revisado no dia 04/12 e testado;
		 * 
		 */
		
		Connection connection = (Connection) request.getAttribute("conexao");
		
		HttpSession session = request.getSession();
		Usuario usuario = (Usuario) session.getAttribute("usuarioLogado");
		PermissaoDAO daoPermissao = new PermissaoDAO(connection);
		UsuarioDAO daoUsuario = new UsuarioDAO(connection);
		int codEmpresa = daoUsuario.verificaEmpresa(usuario);
		List<Permissao> permissaoList = daoPermissao.verificaPermissao(codEmpresa,usuario,"item");
		
		for(Permissao p : permissaoList)
		{
			if(p.getModulo().equals("Unidade") && p.getItem().equals("remover"))
			{
				unidade.setCodEmpresa(codEmpresa);
				
				UnidadeDAO dao = new UnidadeDAO(connection);
				dao.remove(unidade);
				return "redirect:listaUnidade";
			}
		}
		
		return "index";
	}

}
